// server/server-data/users.js
import { readFile, writeFile, access } from "fs/promises";
// constants 模块提供文件操作时所使用的一些常量
import { constants } from "fs";
import { join } from "path";

const filePath = join(process.cwd(), "server", "server-data", "users.json");

async function ensureFileExists() {
  try {
    // constants.F_OK means file exists already and is readable by the current process
    await access(filePath, constants.F_OK);
  } catch (err) {
    // 如果文件不存在，则创建文件并写入空数组
    await writeFile(filePath, "[]");
  }
}

/**
 * 获取所有用户数据，处理空文件或无效 JSON 情况
 * @returns {Promise<Array>}
 */
export async function getUsers() {
  await ensureFileExists();
  const data = await readFile(filePath, "utf-8");
  // 如果文件内容为空或者全是空白字符，则返回空数组
  if (!data.trim()) {
    return [];
  }
  try {
    return JSON.parse(data);
  } catch (error) {
    console.error("解析 JSON 失败，返回空数组：", error);
    return [];
  }
}

/**
 * 保存用户数据
 * @param {Array} users
 */
export async function saveUsers(users) {
  await writeFile(filePath, JSON.stringify(users, null, 2));
}
